051cd9b32da5fdc07b935709c4f1799b0640290e,jeta-apt/src/main/java/org/brooth/jeta/apt/processors/MetaScopeProcessor.java,MetaScopeProcessor,process,#TypeSpec.Builder#RoundContext#,60

Before Change


                    .addField(providerTypeName, providerNameStr, Modifier.PRIVATE)
                    .addMethod(MethodSpec.methodBuilder(metaEntityNameStr)
                            .addModifiers(Modifier.PUBLIC)
                            .returns(metaEntityClassName)
                            .beginControlFlow("if ($L == null)", providerNameStr)
                            .beginControlFlow("synchronized($T.class)", metaEntityClassName)
                            .beginControlFlow("if ($L == null)", providerNameStr)
                            .addStatement("$L = new $T.MetaEntityProvider()", providerNameStr, metaEntityProviderMetacode)
                            .endControlFlow()
                            .endControlFlow()
                            .endControlFlow()
                            .addStatement("return $L.get()", providerNameStr)
                            .build());

            TypeSpec.Builder interfaceBuilder = TypeSpec.interfaceBuilder(metaEntityNameStr)
                    .addJavadoc("emitted by " + metaEntityClassStr + '\n').addModifiers(Modifier.PUBLIC)

After Change


            ClassName metaEntityProviderMetacode = ClassName.bestGuess(MetacodeUtils.getMetacodeOf(
                    env.getElementUtils(), metaEntityClassStr));

            MethodSpec.Builder providerMethodBuilder = MethodSpec.methodBuilder(metaEntityNameStr)
                    .addModifiers(Modifier.PUBLIC)
                    .returns(metaEntityClassName);
            // meta scheme
            TypeElement metaEntityElement = env.getElementUtils().getTypeElement(metaEntityClassStr);
            if (metaEntityElement.getKind().isClass()) {
                metaScopeTypeSpecBuilder.addField(providerTypeName, providerNameStr, Modifier.PRIVATE);
                providerMethodBuilder
                        .beginControlFlow("if ($L == null)", providerNameStr)
                        .beginControlFlow("synchronized($T.class)", metaEntityClassName)
                        .beginControlFlow("if ($L == null)", providerNameStr)
                        .addStatement("$L = new $T.MetaEntityProvider()", providerNameStr, metaEntityProviderMetacode)
                        .endControlFlow()
                        .endControlFlow()
                        .endControlFlow()
                        .addStatement("return $L.get()", providerNameStr);
            } else {
                providerMethodBuilder.addStatement("return null");
            }

            metaScopeTypeSpecBuilder.addMethod(providerMethodBuilder.build());